// 学生信息的路由
var express = require("express");
var router = express.Router();

// 引入mongoose,用于连接mongodb数据库
const mongoose = require("mongoose");

// 1. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/STUDENTS_2202", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

// 2. 判断是否连接成功
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function () {
  console.log("数据库连接成功");
});

// 3. 创建骨架， 定义文档的数据类型
// 骨架一般只用于新增，只有骨架里面的字段并且要符合条件，才能被添加进数据库
const studentsSchema = mongoose.Schema({
  name: String,
  age: Number,
  sex: Number,
  num: Number,
  address: String,
});

// 4. 创建模型, 模型就是一个构造函数, 可以通过构造函数去产生实例，存的是实例
// 里面有两个参数，第一个是集合名称(复数), 第二个是骨架名称
// 查询的时候也是通过模型去查询的
const Students = mongoose.model("students", studentsSchema);

// 查询数据
router.get("/list", function (req, res, next) {
  // 拿到前端传过来的参数，get请求用req.query, post请求用req.body, 字符串
  // console.log(req.query);
  const { current_page, page_size, name } = req.query;
  // 要从数据库里面去获取到数据，并且返回给前端
  // Students.find({}, (err, doc) => {
  //   if (err) throw err;
  //   res.json({
  //     status: 0,
  //     result: doc,
  //   });
  // });
  Students.count(name ? { name } : {}, (err, count) => {
    if (err) throw err;
    Students.find(name ? { name } : {})
      .skip((+current_page - 1) * +page_size)
      .limit(+page_size)
      .exec((err, doc) => {
        if (err) throw err;
        res.json({
          status: 0,
          result: doc,
          count: count,
        });
      });
  });
});

// 删除数据
router.post("/del", (req, res, next) => {
  const { id } = req.body;
  // 判断前端是否传了id
  if (id) {
    Students.remove({ _id: id }, (err) => {
      if (err) throw err;
      res.json({
        status: 0,
        msg: "删除成功",
      });
    });
  } else {
    res.json({
      status: 1,
      msg: "参数错误",
    });
  }
});

// 添加接口
router.post("/add", (req, res, next) => {
  const { name, age, sex, num, address } = req.body;
  // 新增先要去创建一个实例
  const students = new Students({
    name,
    age: +age,
    num: +num,
    sex: +sex,
    address,
  });
  students.save((err) => {
    if (err) throw err;
    res.json({
      status: 0,
      msg: "新增成功",
    });
  });
});

// 编辑用的是updateOne({}, {}, () => {})

module.exports = router;
